package com.example.springbootexceldemo.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

/**
 * Created on 2021-06-04
 */
public class CExcelUtil {


    /**
     * 解析Excel
     *
     * @param file 文件
     * @param startRow 第几行开始
     */
    public static List<List<Object>> explainExcel(File file, Integer startRow) throws Exception {
        InputStream inputStream = new FileInputStream(file);
        List<List<Object>> lists = explainExcel(inputStream, startRow);
        return lists;

    }

    /**
     * 解析Excel
     *
     * @param inputStream 文件输入流
     * @param startRow 第几行开始
     */
    public static List<List<Object>> explainExcel(InputStream inputStream, Integer startRow) throws Exception {
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List<List<Object>> data = reader.read(startRow);
        return data;
    }


    /**
     * 构建Excel
     *
     * @param headers 表头和对象属性的对应关系
     * @param dataList 实体类集合
     * 注意：
     * 1）dataList传入Object ,List<Object> list.add(new Student())
     * 2) dataList最少为一个空对象，否则出现表头为空的问题，他是根据对象属性添加表头，没有对象就没有表头
     * 3）参考MovePersonItemServiceImpl###exportItems的使用方法
     */
    public static ExcelWriter getExcelWriter(LinkedHashMap<String, String> headers, List<Object> dataList) {


        // 准备将数据集合封装成Excel对象
        ExcelWriter writer = ExcelUtil.getWriter(true);

        //添加标题
        for (Entry<String, String> stringStringEntry : headers.entrySet()) {
            writer.addHeaderAlias(stringStringEntry.getKey(), stringStringEntry.getValue());
        }

        //写入数据
        writer.write(dataList, true);


        return writer;


    }


}
